package com.gitee.mrj.aiboot.annotation.config.sf.ui.widget;

import com.gitee.mrj.aiboot.annotation.config.KV;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
@Documented
public @interface SFTreeSelectWidget {


    String placeholder() default "";

    /**
     * 支持清除，默认：`false`
     */
    boolean allowClear() default false;

    /**
     * 下拉菜单和选择器同宽，默认：`true`
     */
    boolean dropdownMatchSelectWidth() default true;

    /**
     * 下拉菜单的 style 属性
     */
    KV[] dropdownStyle() default {};

    /**
     * 下拉菜单的 className 属性
     */
    String dropdownClassName() default "";

    /**
     * 支持多选（当设置 `checkable` 时自动变为true），默认：`false`
     */
    boolean multiple() default false;

    /**
     * 搜索隐藏未匹配的节点，默认：`false`
     */
    boolean hideUnMatched() default false;

    /**
     * 节点前添加 Checkbox 复选框，默认：`false`
     */
    boolean checkable() default false;

    /**
     * checkable 状态下节点选择完全受控（父子节点选中状态不再关联），默认：`false`
     */
    boolean checkStrictly() default false;

    /**
     * 是否展示 TreeNode title 前的图标，没有默认样式，默认：`false`
     */
    boolean showIcon() default false;

    /**
     * 节点前添加展开图标，默认：`true`
     */
    boolean showExpand() default true;

    /**
     * 节点前添加展开图标，默认：`false`
     */
    boolean showLine() default false;

    /**
     * 默认展开所有树节点，默认：`false`
     */
    boolean defaultExpandAll() default false;

    /**
     * 当下拉列表为空时显示的内容
     */
    String notFoundContent() default "";

    /**
     * 默认展开指定的树节点
     */
    String[] expandedKeys() default {};

    /**
     * 最多显示多少个 tag
     */
    int maxTagCount() default Integer.MIN_VALUE;


    /**
     * The size of the items in the list, same as [cdk itemSize](https://material.angular.io/cdk/scrolling/api), Default: `28`
     */
    int virtualItemSize() default Integer.MIN_VALUE;

    /**
     * The number of pixels worth of buffer to render for when rendering new items, same as [cdk maxBufferPx](https://material.angular.io/cdk/scrolling/api), Default: `28`
     */
    int virtualMaxBufferPx() default Integer.MIN_VALUE;

    /**
     * The minimum amount of buffer rendered beyond the viewport (in pixels),same as [cdk minBufferPx](https://material.angular.io/cdk/scrolling/api), Default: `28`
     */
    int virtualMinBufferPx() default Integer.MIN_VALUE;

    /**
     * The height of virtual scroll
     */
    String virtualHeight() default "";
}
